"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 29、第三方库：yaml.py
"""

"""
yaml：
    一种数据序列化格式   
    可超越xml/json的配置文件

YAML基本语法规则：
    1、大小写敏感 
    2、使用缩进表示层级关系  
    3、缩进时不允许使用 Tab 键，只能用空格 
    4、缩进的空格数目不重要，只要相同层级的元素左侧对齐即可  
    5、# 表示注释，从这个字符一直到行尾，都会被解析器忽略

YAML 支持的数据结构
    1、对象: 键值对的集合，用冒号 ：表示
        book: 
            price: 55.5
    
    2、数组 ： 一组按次序排列的值，前加 -
        language: 
            - PHP
            - Java
    
    3、纯量 ：单个的，不可再分的：字符串，布尔值，整数，浮点数，Null，时间，日期
    
pyYAML:
    python 的 YAML 解析器和生成器
    官网： https://pypi.org/project/PyYAML/
    安装： pip install pyyaml
"""

# 安装  pip install pyyaml

import yaml

data = {
    "client": {"default": 'utf-8'},
    "mysql": {"user": 'root', "passwd": 123456},
    "custom": {
        "user1": {"user": '张三', "passwd": 666},
        "user2": {"user1": 'MackJia', "passwd": 999}
    }
}

# 用dump方法把 python对象 转化成 yaml文档   写入yaml文件
with open('./my.yaml', 'w', encoding='utf-8') as f:
    # 包含中文，设置allow_unicode为True
    yaml.dump(data, f, allow_unicode=True)

# 读取yaml文件   safe_load方法：将 yaml文件 转化成 python 对象
file_path = './my.yaml'
with open(file_path, 'r', encoding='utf-8') as f:
    data = yaml.safe_load(f)
# 结果：{'client': {'default': 'utf-8'}, 'custom': {'user1': {'passwd': 666, 'user': '张三'}, 'user2': {'passwd': 999, 'user1': 'MackJia'}}, 'mysql': {'passwd': 123, 'user': 'root'}}
print(data)
# dict字典类型   <class 'dict'>
print(type(data))

# 转化成字典，取user的姓名   张三
user1_name = data['custom']['user1']['user']
print(user1_name)
